#include<iostream>

using namespace std;
// zld:: 这道题目的代码十分简介，到但是算法原理，不是很好想！！
#include<algorithm>
const int N = 1.5e5 + 10;
int f[N], g[N];
//  f[n] 用来看填表记录
int n;
struct node
{
    int x, y;
}a[N];
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;

    // 现在我是是懂了一些相关的概念了，现在我们需对这个数字据区间进行排序
    sort(a + 1, a + 1 + n, [](node& x, node& y){
        return x.y < y.y;
    });
    for (int i = 1; i <= n; i++)
    {
        int l = 0, r = i - 1;
        while (l < r)
        {
            int mid = (r + l + 1) / 2;
            if (a[mid].y < a[i].x) l = mid;
            else r = mid - 1;
        }
        // 此时L就是这个数组中的最大点区间位置
        f[i] = g[l] + a[i].y - a[i].x + 1;
        g[i] = max(g[i - 1], f[i]);
    }
    cout << g[n] << endl;
    return 0;
}